﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ferreteria.Clases;

namespace Ferreteria.Forms.GestionClientes
{
    public partial class FrmEstadoCuenta : Form
    {
        DisancoEntities context;
        Clientes clienteEnt;
        bool ultimapag;
        int countArticulos;


        public FrmEstadoCuenta(int ClienteID)
        {
            InitializeComponent();
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

           
            decimal montoTotalAdeudado = 0;
            countArticulos = 0;
            //Busco el Cliente y sus Cuentas sin pagar
            clienteEnt = context.Clientes.FirstOrDefault(c => c.cliente_id == ClienteID);

            var cuentasImpagas = from cuenta in clienteEnt.Cuentas
                                 where cuenta.cuenta_pagado < cuenta.cuenta_monto
                                   & cuenta.cuenta_estado != Clases.Estado.Anulada
                                 select cuenta;

            dgvFactImpagas.Rows.Clear();
         
            foreach (var cuenta in cuentasImpagas)
            {
                if ((cuenta.Ventas.Count > 0 && cuenta.Ventas.ElementAt(0).venta_estado != Estado.Anulada) || (cuenta.VentasAdicionales.Count > 0 && cuenta.VentasAdicionales.ElementAt(0).va_estado != Estado.Anulada))
                {
                    int i = dgvFactImpagas.Rows.Add();

                    string tipoFactura = "";
                    Int64 nroFactura = 0;

                    if (cuenta.Ventas.Count() > 0)
                    {
                        tipoFactura = cuenta.Ventas.First().venta_tipo_comprobante;
                        nroFactura = cuenta.Ventas.First().venta_nro_inicio;
                    }
                    else
                        if (cuenta.VentasAdicionales.Count > 0)
                        {
                            tipoFactura = "X";
                            nroFactura = cuenta.VentasAdicionales.First().va_nro_comp_ini;
                        }

                    dgvFactImpagas.Rows[i].Cells["cuentaid"].Value = cuenta.cuenta_id;
                    dgvFactImpagas.Rows[i].Cells["cuentafecha"].Value = cuenta.cuenta_fecha;
                    dgvFactImpagas.Rows[i].Cells["tipo"].Value = tipoFactura;
                    dgvFactImpagas.Rows[i].Cells["numero"].Value = nroFactura;
                    dgvFactImpagas.Rows[i].Cells["cuentafecha"].Value = cuenta.cuenta_fecha;
                    dgvFactImpagas.Rows[i].Cells["cuentahora"].Value = cuenta.cuenta_fecha;
                    dgvFactImpagas.Rows[i].Cells["cuentamonto"].Value = cuenta.cuenta_monto;
                    dgvFactImpagas.Rows[i].Cells["cuentapagado"].Value = cuenta.cuenta_pagado;
                    dgvFactImpagas.Rows[i].Cells["cuentaadeudado"].Value = cuenta.cuenta_monto - cuenta.cuenta_pagado;

                    montoTotalAdeudado += (cuenta.cuenta_monto - cuenta.cuenta_pagado);

                 }
                   }

            txbNombre.Text = clienteEnt.cliente_nombre;
            txbCuit.Text = clienteEnt.cliente_cuit;
            txbMontoAdeudado.Text = montoTotalAdeudado.ToString("0.00");

        
                   }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private Font printFont = new Font("Calibri", 11);
        private Font FontTit = new Font("Calibri", 12);
        private Font miniprintFont = new Font("Calibri", 8);
        private Font printFontNormal10 = new Font("Calibri", 10);
       


        private void pdEstadoCta_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

            int margenX = 25;
            int margenY = 50;
            int anchoHoja = 800;

            PointF punto = new PointF();
            punto.X = anchoHoja / 2;
            punto.Y = margenY + 30;

            StringFormat formato = new StringFormat();
            formato.Alignment = StringAlignment.Center;
    
            e.Graphics.DrawString("Estado de Cuenta", FontTit, Brushes.Black, 435, 40, formato);
      
            string fecha = DateTime.Now.Date.ToString("dd/MM/yyyy");
            e.Graphics.DrawString("Fecha:", FontTit, Brushes.Black, 600, 70, formato);
            e.Graphics.DrawString(fecha, FontTit, Brushes.Black, 640, 70);

            e.Graphics.DrawLine(Pens.Black, 10, 110, 800, 110);
            string nombrecli = txbNombre.Text;
            e.Graphics.DrawString(nombrecli, FontTit, Brushes.Black, 310, 70);
            e.Graphics.DrawString("Cliente:", FontTit, Brushes.Black, 270, 70, formato);

            int posYencab = 120;
            int posY = posYencab + 20;
            int anchoLinea = 18;
            int posfecha = margenX + 15;
            int postipoc = posfecha + 90;
            int posnrocomp = postipoc + 120;
            int posmonto = posnrocomp + 150;
            int posdeuda = posmonto + 140;
            //int posPrecioT = posPrecioOf + 62;

            String Cant = "Fecha";
            e.Graphics.DrawString(Cant, printFont, Brushes.Black, posfecha + 8, posYencab);
            String Art = "Tipo Comp.";
            e.Graphics.DrawString(Art, printFont, Brushes.Black, postipoc, posYencab);
            String PrecioU = "Nro. Comp.";
            e.Graphics.DrawString(PrecioU, printFont, Brushes.Black, posnrocomp, posYencab);
            String Bonif = "Monto Compra";
            e.Graphics.DrawString(Bonif, printFontNormal10, Brushes.Black, posmonto, posYencab);
            String PrecioOf = "Monto Adeudado";
            e.Graphics.DrawString(PrecioOf, printFontNormal10, Brushes.Black, posdeuda, posYencab);

            int lineafin = 1045;
            int posSubtotX = 90;

            e.Graphics.DrawLine(Pens.Black, 10, 1035, 825, 1035);
           
            int countLineas = 0;
            int maxLineas = 53;
            ultimapag = false;
            int maxArticulos = dgvFactImpagas.Rows.Count;

            while (countLineas < maxLineas && countArticulos < maxArticulos)
            {
                DataGridViewRow fila = dgvFactImpagas.Rows[countArticulos];

                //fecha
                DateTime fechacompra = Convert.ToDateTime(fila.Cells[2].Value.ToString());
                e.Graphics.DrawString(Convert.ToString(fechacompra.ToShortDateString()), printFont, Brushes.Black, posfecha, posY);
             
                //TipoC
                e.Graphics.DrawString(fila.Cells[3].Value.ToString(), printFont, Brushes.Black, postipoc + 20, posY);
                //NroComp
                string nrocomp = Convert.ToString(fila.Cells[4].Value.ToString());
                e.Graphics.DrawString(nrocomp, printFont, Brushes.Black, posnrocomp, posY);
                //Montototal
                decimal monto = Math.Round(Convert.ToDecimal(fila.Cells[5].Value), 2);
                e.Graphics.DrawString("$ " + Convert.ToString(monto), printFont, Brushes.Black, posmonto, posY);

                //Adeuado
                decimal deuda = Math.Round(Convert.ToDecimal(fila.Cells[7].Value), 2);
                e.Graphics.DrawString("$ " + Convert.ToString(deuda), printFont, Brushes.Black, posdeuda + 5 , posY);

              
                countArticulos++;
                countLineas++;
                posY += anchoLinea;
            }

            if (countArticulos == maxArticulos)
            {
                e.HasMorePages = false;
                ultimapag = true;
                countArticulos = 0;
            }
            else
                e.HasMorePages = true;

            if (ultimapag)
            {
                String tot = "TOTAL ADEUDADO  $";
                e.Graphics.DrawString(tot, printFont, Brushes.Black, posSubtotX + 465, lineafin);
                decimal total = Decimal.Round(Convert.ToDecimal(txbMontoAdeudado.Text), 2);
                e.Graphics.DrawString("$" + Convert.ToString(total), printFont, Brushes.Black, posSubtotX + 650, lineafin);
            }






        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
          
            ImprirmirEstadoCta();
            //countArticulos = 0;
        }
        
        private void ImprirmirEstadoCta()
        {
            printDialogECta.PrinterSettings.Copies = 1;
            DialogResult resultunico = printDialogECta.ShowDialog();
            
            if (resultunico == DialogResult.OK)
            {
                pdEstadoCta.PrinterSettings = printDialogECta.PrinterSettings;
                printPreviewDEcta.Document = pdEstadoCta;
                ((Form)printPreviewDEcta).WindowState = FormWindowState.Maximized;
                printPreviewDEcta.ShowDialog();
                
            }
        }

        private void toolStripButton1_Click_1(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
